/*******************************************************************************
 * 版权：北京润尼尔网络科技有限公司，保留所有版权<br>
 * 版本：v1.0.0<br>
 * 文件：Application.js<br>
 * 日期：2017年9月29日<br>
 * 作者: 样顺强<br>
 * 功能：应用程序入口对象，只负责页面视图创建，不负责业务逻辑处理<br>
 *
 * 修改记录：<br>
 * 日期 描述 更新功能<br>
 ******************************************************************************/

window.makeNamespace(window, "Rainier.UI.V2");

/**
 * 类型名称：Rainier.UI.V2.Application<br>
 * 类型功能：应用程序,只负责界面视图创建，不负责业务逻辑处理<br>
 */
Rainier.UI.V2.Application = Rainier.Basic.CompositeObject.extend({
  NAME: "Rainier.UI.V2.Application",

  /**
   * 函数名称：init<br>
   * 函数功能：构造函数<br>
   * 参数信息：$container:应用程序容器对象，
   * 异常信息：无<br>
   */
  init: function ($container, courseName) {
    this._super();
    this.$container = $container;
    this.context = new Rainier.UI.V2.AppContext(this);
    this.components = {};
    this.courseName = arguments[1] ? arguments[1] : " ";
    this.dialogList = new draw2d.util.ArrayList(); //结果以对话框的形式显示；则将打开的对话框存入此处
  },

  /**
   * 函数名称：buildGUI<br>
   * 函数功能：完成应用程序界面初始化<br>
   * 参数输入：无<br>
   * 函数返回：无<br>
   * 异常信息：无<br>
   */
  buildGUI: function (connectFlag) {
    // this.createMainView();
    this.createViewComponent();

    //启动连接
    // if(connectFlag){
    // 	this.context.connectComputePlugin();
    // }

    //发送给父页面表示页面已加载完毕
    if (window.parent) {
      window.parent.postMessage("exper_sym_loaded", "*");
    }

    // window.localStorage.clear();
  },

  /**
   * 函数名称：createView<br>
   * 函数功能：创建主体页面<br>
   * 参数输入：无<br>
   * 函数返回：无<br>
   * 异常信息：无<br>
   */
  createMainView: function () {
    var name = this.courseName;
    var properties = {
      title: name,
      headerCls: "app-header",
      bodyCls: "app-body",
      fit: true,
      border: false,
      maximized: true,
      footer: '<div class="easyui-panel app-footer"></div>',
    };
    this.panel = new Rainier.UI.V2.UICompositePanel(this.$container, properties);
    //todos://
    var draw2dEditor = new Rainier.UI.V2.Draw2dGraphicalEditor();
    draw2dEditor.createComposite($("#app-canvas"));

    this.setContextEditor(draw2dEditor);
  },

  /**
   * 函数名称：createViewComponent<br>
   * 函数功能：创建组件页面<br>
   * 参数输入：$container : 当前组件容器元素<br>
   * 函数返回：无<br>
   * 异常信息：无<br>
   */
  createViewComponent: function () {
    for (var component in this.components) {
      if (this.components[component].createView) {
        this.components[component].createView();
      }
    }
  },

  /**
   * 函数名称：registerViewComponent<br>
   * 函数功能：注册组件到主体程序<br>
   * 参数输入：objParams : {key,viewComponent}<br>
   * 函数返回：无<br>
   * 异常信息：无<br>
   */
  registerViewComponent: function (objParams) {
    $.extend(true, this.components, objParams);
  },

  /**
   * 函数名称：setContextEditor<br>
   * 函数功能：向context注入创建的Ediotr编辑器，便于context进行控制<br>
   * 参数输入：activeEditor : 创建的editor编辑器对象<br>
   * 函数返回：无<br>
   * 异常信息：无<br>
   */
  setContextActiveEditor: function (activeEditor) {
    this.context.setActiveEditor(activeEditor);
  },

  /**
   * 函数名称：setBoxEdiotr<br>
   * 函数功能：设置方框图编辑器<br>
   * 参数输入：无<br>
   * 函数返回：应用程序上下文<br>
   * 异常信息：无<br>
   */
  setContextBoxEditor: function (boxEditor) {
    this.context.setBoxEditor(boxEditor);
  },

  /**
   * 函数名称：getContext<br>
   * 函数功能：获取应用程序的上下文对象<br>
   * 参数输入：无<br>
   * 函数返回：应用程序上下文<br>
   * 异常信息：无<br>
   */
  getContext: function () {
    return this.context;
  },

  /**
   * 函数名称：getControlComponent<br>
   * 函数功能：获取应用程序的控制组件<br>
   * 参数输入：无<br>
   * 函数返回：控制栏组件对象<br>
   * 异常信息：无<br>
   */
  getControlComponent: function () {
    return this.components.APP_VIEW_COMPONENT_CONTROL;
  },

  /**
   * 函数名称：getMenuComponent<br>
   * 函数功能：获取应用程序的菜单组件对象<br>
   * 参数输入：无<br>
   * 函数返回：菜单栏组件对象<br>
   * 异常信息：无<br>
   */
  getMenuComponent: function () {
    return this.components.APP_VIEW_COMPONENT_MENU;
  },

  /**
   * 函数名称：getPratLibComponent<br>
   * 函数功能：获取应用程序的元件库组件对象<br>
   * 参数输入：无<br>
   * 函数返回：器材栏组件对象<br>
   * 异常信息：无<br>
   */
  getPartLibComponent: function () {
    return this.components.APP_VIEW_COMPONENT_PARTLIB;
  },

  /**
   * 函数名称：getUsedPratLibComponent<br>
   * 函数功能：获取应用程序已使用的元件库组件对象<br>
   * 参数输入：无<br>
   * 函数返回：已使用的器材栏组件对象<br>
   * 异常信息：无<br>
   */
  getUsedPartLibComponent: function () {
    return this.components.APP_VIEW_COMPONENT_USED_PARTLIB;
  },

  /**
   * 函数名称：getPropertyComponent<br>
   * 函数功能：获取应用程序的属性栏组件<br>
   * 参数输入：无<br>
   * 函数返回：属性栏组件对象<br>
   * 异常信息：无<br>
   */
  getPropertyComponent: function () {
    return this.components.APP_VIEW_COMPONENT_PROPERTY;
  },

  /**
   * 函数名称：getExperimentComponent<br>
   * 函数功能：获取应用程序的实验列表组件<br>
   * 参数输入：无<br>
   * 函数返回：实验列表组件对象<br>
   * 异常信息：无<br>
   */
  getExperimentComponent: function () {
    return this.components.APP_VIEW_COMPONENT_EXPRIMENT;
  },

  /**
   * 函数名称：getSezrchComponent<br>
   * 函数功能：获取应用程序的检索组件<br>
   * 参数输入：无<br>
   * 函数返回：搜索组件对象<br>
   * 异常信息：无<br>
   */
  getSearchComponent: function () {
    return this.components.APP_VIEW_COMPONENT_SEARCH;
  },
  /**
   * 函数名称：getSezrchComponent<br>
   * 函数功能：获取应用程序的实验结果<br>
   * 参数输入：无<br>
   * 函数返回：搜索组件对象<br>
   * 异常信息：无<br>
   */
  getResultComponent: function () {
    return this.components.APP_VIEW_COMPONENT_RESULT;
  },
});
